perm filename SCOR5.F4[IRC,LCS] blob sn#273047 filedate 1977-03-30 generic text, type T, neo UTF8
C  THIS PROGRAM IS THE PROPERTY OF LELAND SMITH, PROFESSOR OF MUSIC
C  AT STANFORD UNIVERSITY.  IT MAY NOT BE COPIED OR ALTERED IN ANY
C  WAY WITHOUT WRITTEN PERMISSION OF THE AUTHOR.


C   LOAD 'SCORE' WITH BRZ.REL (RANDOM NUMBER GENERATOR AND 'ZERPP') -
C   AND, IF DESIRED, A SUBROUTINE WITH THE FOLLOWING HEADING:
C      SUBROUTINE SUBR
C    COMMON/X/P(30),INST,IPAR,CNT(25),BT,IREST,CVT(35),PL(30),DF,DUR(25)
C  INST=INST#. IPAR=PARAM#. DF=DUTY FACTOR.  WHEN SUBROUTINE IS CALLED

      COMMON/X/P(30),J,L,CNT(25),BT,MK,VX(35),PL(30),DF,DUR(26),TF,
     1XT(25),ROFF(25),V(2000),NP(25),PCH(25,32),INST(26),IXIN,NINS,IALL,
     1DURX,AMPFAC,IT(30),I,OP1,INUM(25),BG(80),INP(72),TP,
     1CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
     1,LIST(78),INVIS(25),RDEV(25),IBLA,KSLA,ICOM,ISEMI,IMIN,ISTAR
     1,IEL,IPLUS
      COMMON/SC/ML,JJ,NNUM,NFLG,JA,ISUB,CODE,IAMP,M
      COMMON /Q/ BNW(40),NWZ
      COMMON/FINE/LK
      COMMON/RW/NWRITE,NDEC,LPT,DEBUG,KZY
      DIMENSION IV(2000)
      DATA IPLAY/'PLAY'/,IEND/'END'/,ISECT/'SECT'/,ITMPO/'TEMP'/
     1,IRUN2/'RUN;'/,IRUN/'RUN'/,KZY/25/,IVV/'V'/
     1,ILFP/'('/,IAT/'@'/,IRTP/')'/,IDOL/'$'/,IFINI/'FINI'/
      EQUIVALENCE (VX2,VX(2)),(VX1,VX(1))
     1,(IPP,ISCA(2)),(VX3,VX(3)),(IEN,ISCA(4)),(IE,ISCA(5))
     1,(VX4,VX(4)),(VX5,VX(5)),(VX6,VX(6)),(IU,ISCA(7)),(ITT,MU5(1))
     1,(ISS,ISCA(9)),(ID,ISCA(3)),(IF,ISCA(6)),(IDOT,
     1IDAT(11)),(IEM,MU5(12)),(II,MU5(10)),(IR,MU5(6)),(IXX,MU5(9))
     1,(IG,ISCA(8)),(IAA,ISCA(10)),(IV(1),V(1))
C IF DIMENS. ARE CHANGED, CHANGE KZY. ALL CHNGS MUST BE MULTS OF KZY.
C SET INST(KZY+1), CHECK BG, CHECK BLOCK DATA VALUES.
      CVTX=10000.
      CALL INSTS
      LPAR=0
      DO 1900 K=1,KZY
1900      INUM(K)=K
      IPRN=0
      QX=0.
      MOT=0
      RETRO=-1.
      INVRT=-1
      LCNT=1
      PARENS=0
      JZ=1  
      PR=0  
      IAMP=0
C  IAMP IS 'BLANK LINE'FLAG ON PP1-3.
      T5=0  
      NINS=0
      K=0
      IDALL=-1
      BT=0
      NWZ=1
      BNW(1)=0
      I=1
      KL=0  
      TP=0  
      KN=IBLA
      RA=0  
      CHN=0 
      DO 127 K=1,77,3
127      LIST(K)=0
C  INITIALIZES MOTIVIC LIST FOR ERROR FINDING ROUTINE.
      NWX=0
      BY=-1
      DO 1128 K=1,KZY     
      INVIS(K)=0
      INST(K)=0
      CNT(K)=0
      RDEV(K)=0
C  RDEV IS FOR RAND DEVIATIONS AT RUN TIME
      NP(K)=0
      IQ(K)=0
C   IQ IS FOR RESTART FLAG
      DO 1128 L=1,32    
1128   PCH(K,L)=0 

2308      JREAD=1
4400      READ(NDEC,1007)LN,J,INP
C****** LN=LINE NUM, J=INST NAME *******
      WRITE(LPT,1007)LN,J,INP
1007      FORMAT(I,A4,72A1)

441      IF(J.EQ.IBLA)GO TO 4400
      MLX=1
      IZ=0
      JA=-1
      ISUB=4
      ALL=1.
      VX1=0
      VX2=0
      VX3=0
      LK=-1
      K=0
      IF(V(I-1).NE.-9900.-BY)GO TO 364
      BY=-1.
      I=I-1
364      DO 361 JD=1,72
      N=INP(JD)
      IF(N.NE.IR)GO TO 361
C  LOOKS FOR 'RESTART'
      DO 3611 M=JD,72
      KL=INP(M)
      IF(KL.EQ.IBLA.OR.KL.EQ.ISEMI.OR.KL.EQ.KSLA.OR.KL.EQ.ICOM)GO TO 3631
3611      INP(M)=IBLA
C   CHANGES 'RESTART' TO BLANKS
3631      DO 363 N=1,NINS
      IF(J.NE.INST(N))GO TO 363
      IQ(N)=-1
C   SETS RESTART FLAG.  THIS INST WILL NOW APPEAR WITH NEW NUM.
      GO TO 362
363      CONTINUE
361      IF(N.EQ.KSLA.OR.N.EQ.ISEMI)GO TO 6773
6773      K=K+1
      IF(K.GT.NINS)GO TO 36
      IF(INST(K).NE.J.OR.IQ(K).EQ.-1)GO TO 6773
C   FINDS CORRECT INST NUM.  PASSES RESTARTED INSTS.
      LK=K
      GO TO 1773
36      IF(J.EQ.IRUN2.OR.J.EQ.IRUN)CALL RUNIT
      IF(J.EQ.ITMPO.OR.J.EQ.IPLAY.OR.ISUB.GT.4)GO TO 1773
      IF(J.EQ.ISECT)GO TO 1081
C******************  ABOVE AND BELOW FOR 'SECTIONS'
      IF(J.EQ.IEND.OR.J.EQ.IFINI)GO TO 1082
362      LK=NINS+1
      IF(LK.GT.KZY)GO TO 99
      INST(LK)=J
      IZ=LK
      GO TO 1773

C*********** DOWN TO 99 FOR 'SECTIONS'
1083      V(I)=-99.
      KL=1
      GO TO 3083
C  READS 'PLAY SECT. N1,N2'
1081      V(I)=-199.
      KL=4
3083      DO 2081 K=KL,72
      IF(INP(K).EQ.IBLA)GO TO 2081
      IV(I+1)=INP(K)
      I=I+2
3081      BY=-1.
      GO TO 2308
2081      CONTINUE
C   READS SECTION IDENTIFIER, -199. MARKS BEGINNING
C1082      IF(V(I-1).EQ.-9900.-BY)I=I-1
C********* FEB 15,71
1082      V(I)=-299.
      I=I+1
      GO TO 3081
C   MARKS END OF SECTION
C************************

99    WRITE(LPT,199)LN
C****** TYPE IS FOR PDP10 *********
      STOP
199      FORMAT(' ERROR!!  LAST LINE READ =',I6/)
4      IF(LK.LE.NINS)GO TO 8773
      IF(ALL.GT.0)GO TO 1004
      IF(IDALL.GT.0)GO TO 8773
      BG(LK)=VX1
      IDALL=LK
      GO TO 2004
C 'MOVE' CHANGES IN 'ALINS' CAN'T BE RESET IN INDIV. INSTS.
1004      BG(LK)=VX1
      IF(LK.EQ.IZ)VX1=0
C   MAY 3,71 **** ALL PARAMS WILL BE SET UP AT TIME 0.
C   CHECK EFFECT ON 'MOVE'!
C ******** APR.23, 1971  FIXES BG TIMES IN 'MOVE'?????!!!!!!!
2004      NINS=LK
      IF(VX3.NE.0)VX2=10000.+VX3
      IF(VX2.EQ.0)VX2=-1
      DUR(LK)=VX2
      GO TO 900
C******** ABOVE FOR REST ONLY ENTRIES.  FEB 18,71
8773      IF(VX2.NE.0)VX1=VX1*10000.+VX2
900      IF(VX1.EQ.BY.AND.J.NE.IPLAY)GO TO 5773
C*********** 'PLAY' IS FOR 'SECTIONS'
      BY=VX1
C  BY=CURRENT BG TIME.
C********* FEB 15,71
      V(I)=-9900.-BY
      I=I+1
      IF(NWZ.NE.0)CALL BGSORT(BY)
5773      IF(J.EQ.ITMPO)GO TO 1106
      IF(J.EQ.IPLAY)GO TO 1083
C*********** ABOVE FOR 'SECTIONS'
4773      NW=LPAR
CC      IF(I.GT.1900.)TYPE 107,I
C *********** TYPE IS FOR PDP10 -- GIVES WARNING NEAR END OF V *******
      ALL=1.
      CVT=0
      DF=0
      ISUB=1
1299      IF(JZ.NE.0)GO TO 1773


77732      FORMAT(72A1)
87732      FORMAT(1X72A1)
7773      READ(NDEC,2114)LN,INP
      WRITE(LPT,2114)LN,INP
442      IF(INP(1).EQ.IBLA)GO TO 7773
77733      MLX=1
C   'LISTS' MUST END WITH * 
1773      IF(IPRN.EQ.0)GO TO 17732
      L=I-1
      IF(V(I-1).EQ.999.)L=L-1
      IPRN=IPRN-1
      IF(PARENS.EQ.0)GO TO 17733
      PARENS=0
      LIST(LCNT+2)=L
      LCNT=LCNT+3
      IF(IPRN.EQ.0)GO TO 17732
      IPRN=0
17733      LIST(MOT)=L
      MOT=0
C   FOR ERROR TRAP

17732      JZ=0
      N=0
17731      ML=MLX

C  FOR MUSIC5 CONVERSIONS (512/SRATE)
C   BIG LOOP -- TO END OF PAGE 1.
      JD=ML
975      N=INP(JD)
      JD1=JD+1
      IF(N.EQ.IBLA.OR.N.EQ.ICOM)GO TO 236
C ((((())))) MAY 13,71 /Z (D4/E/X 2 3)/ CS/ ETC.  CAN USE 26 LABELS.
33611      IF(N.NE.ILFP.AND.N.NE.IRTP)GO TO 2361
      INP(JD)=IBLA
      L=JD-1
5113      IF(INP(L).NE.IBLA)GO TO 2113
      L=L-1
      GO TO 5113
2113      IF(N.EQ.IRTP)GO TO 3361
      IF(PARENS.EQ.0)GO TO 1140
      LCNT=LCNT+3
      IF(MOT.NE.0)GO TO 11403
      MOT=LCNT-1
1140   N=LCNT-1
        DO 11401 JC=1,N,3
      IF(INP(L).NE.LIST(JC))GO TO 11401
C  FINDS DUPLICATE IDENTIFIER
      WRITE(LPT, 11402)INP(L)
      GO TO 99
11403      WRITE(LPT, 11404)
      GO TO 99
11404      FORMAT(' MORE THAN 2 PARENS OPEN'/)

11402      FORMAT(' MOTIVIC (',A1,') USED TWICE')
11401      CONTINUE
      LIST(LCNT)=INP(L)
      PARENS=-1.
      INP(L)=IBLA
      LIST(LCNT+1)=I
      GO TO 236
3361      IPRN=IPRN+1
      GO TO 236
2361      IF(N.NE.IAT)GO TO 5361
      DO 113 L=1,72
      K=JD+L
C   K IS USED AT 240!!!
      JG=INP(K)
      IF(JG.NE.IMIN)GO TO 6113
      RETRO=0
      INP(K)=IBLA
      GO TO 113
6113      IF(JG.NE.IDOL)GO TO 7113
C  '$' IS FOR INVERSIONS IN 'NOTES'
      INVRT=0
      GO TO 113
7113      IF(JG.NE.IBLA)GO TO 4113
113      CONTINUE
4113      DO 6361 L=1,LCNT,3
      IF(JG.NE.LIST(L))GO TO 6361
      VX1=0
       JDO=JD+2
      DO 40 M=JDO,72
      JG=INP(M)
      IF(JG.EQ.IBLA)GO TO 40
      IF(JG.EQ.KSLA.OR.JG.EQ.ISEMI.OR.JG.EQ.ISTAR)GO TO 140
      ML=M
      GO TO 240
40      CONTINUE
240      JC=JA
      JA=-1
      INP(K)=IBLA
      CALL SCANR
      JA=JC
140      JC=1
      KN=LIST(L+1)
      M=LIST(L+2)+1
      IF(RETRO.LT.0)GO TO 640
      JC=M-1
      M=KN-1
      KN=JC
      JC=-1
      RETRO=-1.
640      IF(INVRT.LT.0)GO TO 940
840      X=V(KN)
      V(I)=X+VX1
C  FINDS CENTER FOR INVERSION (+TRANSP.)
      I=I+1
      KN=KN+JC
      IF(V(KN-JC).NE.85.)GO TO 940
      V(I-1)=85.
      GO TO 840

940      Z=V(KN)
      IF(INVRT.EQ.0)GO TO 440
      IF(VX1.EQ.0)GO TO 540
C  " @Q N "  WHERE N= 1/2 STEPS IN 'NOTES' OR MULT FACTOR IN OTHERS.
      IF(CODE.EQ.-33.)GO TO 440
      V(I)=Z*VX1
      GO TO 7361
440      IF(Z.EQ.85.)GO TO 540
      Y=0
      IF(INVRT.EQ.0)Y=(X-Z)*2.
      V(I)=Z+VX1+Y
      GO TO 7361
540      V(I)=Z
7361      I=I+1
      KN=KN+JC
      IF(KN.NE.M)GO TO 940

      INVRT=-1
      RB=V(I-1)
      DO 8361 L=JD,72
      JG=INP(L)
C   PUT IN NOV 25, 72
      IF(JG.EQ.ISEMI)GO TO 93612
      INP(L)=IBLA
      IF(JG.EQ.KSLA)GO TO 9361
      IF(JG.EQ.IRTP)IPRN=IPRN+1
8361      IF(JG.EQ.ISTAR)IAMP=-1
9361      MLX=L
C  NOTE DIFFERENCES IN SCOLB FROM HERE TO 43611
      IF(IAMP.EQ.0)GO TO 1773
      JZ=-1
93612      IF(IAMP.EQ.0)GO TO 93611
C   NOV 25, 72
      GO TO 3013
93611      IF(JG.EQ.ISEMI)GO TO 7773
      JZ=0
      IF(IPRN.NE.0)GO TO 1773
      GO TO 236
6361      CONTINUE
      GO TO 99
C @@@@@@@@@@@@@@@@@@@@@@@@@@
5361      IF(N.NE.ID.OR.ISUB.NE.1)GO TO 53611
	IF(INP(JD+1).NE.IF)GO TO 5362
C  JUMP IF NOT DUTY FACTOR
	DF=DF-100.
	GO TO 43615
53611	IF(N.NE.ISS.OR.INP(JD+1).NE.'U')GO TO 53612
	DF=DF-200
C  FOR SUBROUTINE FLAG.  CAN'T CALL SUBR AT SAME TIME AS REP OR X!!!!
	GO TO 43615
53612	IF(N.NE.IAA)GO TO 53613
C   FINDS 'ALL'.
	IF(INP(JD+1).NE.'L')GO TO 236
	ALL=-1.
      GO TO 43615
53613 IF(N.NE.IF.OR.INP(JD1).NE.IR)GO TO 43611
C  JUMP IF NOT "FREQ"
      CVT=-1
      GO TO 43615
5362  IF(INP(JD+2).NE.IR.OR.INP(JD1).NE.IU)GO TO 236
C  JUMP IF NOT "DUR"
      CVT=1
      GO TO 43615
C  FOR DUTY FACTOR
C  TYPE 'ALL' AFTER PARAM NUM TO PUT DATA IN ALL INSTS.

43611      IF(ISUB.NE.4)GO TO 43613
         IF(N.NE.IG)GO TO 43616
C  NEXT MAKES INST NAME, P1 AND P2 INVISIBLE (FOR GEN AND VAR)
      INVIS(LK)=-1
      GO TO 43615
43616    IF(N.NE.IVV)GO TO 43613
       INVIS(LK)=1
43615      DO 43614 L=JD,72
      N=INP(L)
      IF(N.EQ.IBLA.OR.N.EQ.ICOM.OR.N.EQ.ISEMI.OR.N.EQ.KSLA)GO TO 236
43614      INP(L)=IBLA
43613      IF(N.NE.KSLA)GO TO 636
      MLX=JD1
      JZ=-1
      INP(JD)=ISEMI
436      IF(INP(MLX).NE.IBLA)GO TO 336
      MLX=MLX+1
      GO TO 436
636      IF(N.NE.ISEMI)GO TO 936
336      IF(ISUB.GT.3)GO TO 1899
         GO TO (101,102,103),ISUB
C             PAR  MOV LIST  OTHERS
936      IF(N.NE.IDOT)GO TO 736
      L=INP(JD1)
      DO 836 KL=1,10
836      IF(L.EQ.IDAT(KL))GO TO 236
      IF(CODE.EQ.-22.)INP(JD)=1
      GO TO 236
C   CHANGES DOTTED RHYTHMS TO '1'S.
736      IF(N.NE.ISTAR)GO TO 236
      IAMP=-1
      INP(JD)=IBLA
236      JD=JD1
      IF(JD.LT.73)GO TO 975
      GO TO 99

101      NX=INP(ML)
      IZ=ML
      ML=ML+1
      IF(NX.EQ.IBLA)GO TO 101
C ⊗⊗⊗⊗⊗ MAY 13,71 @@@@@@@@@@
      JA=-1
      IF(NX.EQ.IPP)GO TO 1
      IF(NX.EQ.IE)GO TO 2308
      IF(NX.EQ.IR)CALL RUNIT
C   'RUN' MAY REPLACE 'END' FOR LAST INST.
C  LOOKS FOR PARAM, END, RUN OR I(=INS NUM.)
      IF(NX.EQ.ID)GO TO 7720
      IF(NX.NE.II)GO TO 99
1      CALL SCANR
       LPAR=VX1
      IF(NX.NE.II)GO TO 5703
      INUM(LK)=LPAR
C  RESETS "INS" NUMBER
      GO TO 1299
5703    IF(LPAR.EQ.2)CVT=1
C P2 AND RHY ALWAYS CONVERT AS "DUR"
      IJ=LPAR
      IAMP=0
      IF(IJ.GT.NP(LK).AND.IJ.LT.31)NP(LK)=IJ
      IF(LPAR.EQ.32)LPAR=1
      V(I)=LPAR+LK*10000
C  +1=WDCNT, +2=CODE, +3='NM' CCCCC
      IJ=I+1
      I=I+4
      ITMP=0
      CODE=0
      NFLG=1
      ML=IZ+M
C   RE=REP  R=RHY  L=LIT  M=MOVE  MX=MOVX  N=NOTES  NU=NUM  
C   S=SUBR  RL=RLIST  RN=RNOTES
5702      ML=ML+1
      IF(ML.GT.72)GO TO 99
      N=INP(ML)
      IF(N.EQ.IBLA.OR.N.EQ.ICOM)GO TO 5702
      NL=INP(ML+1)
      JA=-1
      ISUB=0
      IF(N.EQ.IXX)GO TO 2703
      IF(N.EQ.IR)GO TO 6702
4005      JA=0
      IF(N.EQ.IEN)GO TO 6005
      IF(N.EQ.IEM)GO TO 703
      IF(N.EQ.ISS)GO TO 6703
      IF(N.EQ.ISEMI)GO TO 2018
      IF(N.EQ.IPP)JA=-1
C  FOR /P5  P3/
      CALL SCANR
      I=I+JJ
      V(IJ+1)=NNUM+DF
      IF(JJ.EQ.1)GO TO 4006
C  IF NNUM IS '-2' THEN NOTES ARE PRINTED
      IF(NNUM.NE.-2)GO TO 5006
      CVT=-1
      IX=IJ+3
      DO 2006 K=2,JJ,3
2006  CALL RANR(VX,K)
C   FOR RAN. SELEC. OF NOTES.  FINDS HIGHEST NOTE.
5006      IX=IJ+2
      DO 6006 K=1,JJ
6006      V(IX+K)=VX(K)
      GO TO 3013
4006      IF(JA.LT.0)VX1=VX1/100.+9999.
C  CHANGES /P5 P3/ TO /P5 9999.03/
      V(I-1)=VX1
      IF(NNUM.EQ.-2)CVT=-1.
      GO TO 3013
6702      IF(NL.EQ.IE)GO TO 2703
C   JUMP IF "REP"
      IF(NL.EQ.IEL)GO TO 6704
      IF(NL.EQ.IEN)GO TO 6705
      CVT=1
      CODE=-22
      GO TO 1016
6704      CODE=-46.0
C   FOR "RLIST" (LIST OF RAND SELECTIONS)
      GO TO 1016
C   JUMP IF NOT "RNOTES"
6705      JA=0
C   FOR SCANR
      CODE=-36.
      GO TO 7
6005      IF(NL.EQ.IU)GO TO 6706
      CODE=-33
7     CVT=-1
      GO TO 1016
6706      CODE=-44.
1610      JA=-1
      GO TO 1016
703      BW=V(IJ-2)
      IC=0
      JDO=ML+1
      DO 7031 K=JDO,72
      IF(INP(K).EQ.ISEMI)GO TO 8031
7031      IF(INP(K).EQ.IXX)IC=-1
C****************  JUNE 1,71   X 4
8031      I=I-1
      V(I)=0
C ********* FEB. 15,71
      X=-9900.-BY
      IF(BY.EQ.0)X=-9900.-BG(LK)
         IF(BW.EQ.X)GO TO 8005
      IF(BW.NE.-9900.-BY)GO TO 1102
      V(IJ-2)=X
      GO TO 8005
1102      V(IJ)=V(IJ-1)
      V(IJ-1)=X
      IJ=IJ+1
      I=I+1
8005      LP=IJ-1
      BW=-9900.-X
      ISUB=2
      IZ=-1
C  ABOVE ARRANGES NECESSARY BG TIME HEADINGS.
      GO TO 1299
102      IF(IZ.LT.0)GO TO 2102
      BW=V(ICT)+BW
      V(I)=-9900.-BW
      V(I+1)=V(LP)
      V(I+2)=(JJ+3)*ALL
C  3 LEAVES ROOM FOR CNVRT CODE AT END.
      V(I+3)=CODE+DF
      I=I+4
      IZ=1
2102      IF(BW.LT.10000.)CALL BGSORT(BW)
C   ROUND-OFF NONSENSE
2      VX3=-9900.
      VX2=VX3 
      CALL SCANR
	IF(JJ.GT.0)GO TO 5102
	JJ=ILIT
C SLASH WILL REPEAT MOVE INPUT -- 6/74
	DO 6102 K=1,JJ
6102	VX(K)=VX(K+20)
	GO TO 5005
C::::::::::::::: PUT THIS, AND AT 5505, IN SCOR5 ALSO ::::::::::::::
5102	IF(JJ.EQ.4)GO TO 99
      IF(VX3.NE.-9900.)GO TO 3102
      IF(VX2.NE.-9900.)GO TO 4102
      VX2=VX1
      VX1=10000.
4102      VX3=VX2
      JJ=3
C  1,2 OR 3 NUMS CAN BE USED IN NON-RAN MOVES.
3102      IF(IZ.GE.0)GO TO 3006
      V(IJ)=(JJ+3)*ALL
C**** +3 FOR MUSIC5 ******
C  WORD COUNT
      CODE=-55.
      IF(JJ.NE.3)CODE=-57.
C  THIS IS NOW OUT, FEB 15,70.  -10000. MEANS 'NOTES AT BG TIME 0'
      IF(NFLG.LT.0)CODE=CODE-1.
      IF(IC.LT.0)CODE=-59.
C****************  JUNE 1,71   
C  CODE=-56 OR -58 FOR NOTES.
      V(IJ+1)=CODE+DF
      IZ=0
3006      IF(NFLG.EQ.1)GO TO 5005
      CVT=-1
      CALL RANR(VX,2)
      IF(JJ.NE.3)CALL RANR(VX,4)
C   FOR RAN. SELEC. OF NOTES.  FINDS HIGHEST NOTE.
5005      ICT=I
	ILIT=JJ
C  SAVES FOR SLASH REPEAT FEATURE  6/74
        IJ=IJ+1
      DO 1006 K=1,JJ
1006      V(IJ+K)=VX(K)
      I=I+JJ  
      V(I)=CVT
      I=I+1
C  ADDS CNVRT CODE AT END
      IJ=I+2
      IF(IAMP.EQ.0)GO TO 1299
C*** MAY 18,71 ** ALWAYS RESETS TO TIME 0 WHEN MOVE IS USED.
      V(I)=-9900.-BY
      GO TO 8703
C   ABOVE IS FOR 'DF'  (DUTY FACTOR)
7703      V(IJ)=4.*ALL
8703      I=I+1
      GO TO 4773
C   FOR SUBROUTINES, -12=NUMS.  -11=LETTERS.
6703      CODE=-12.
      IF(INP(ML+3).EQ.IEL)CODE=-11.
      V(IJ)=2.*ALL
      V(IJ+1)=CODE+DF
      I=I-1
      GO TO 4773
2338      I=I-4
      GO TO 4773
C  'REP'
2703      ML=ML+1
      VX1=0
      VX2=0
      VX3=0
      IF(N.EQ.IXX)GO TO 2704
      INP(ML)=IBLA
      INP(ML+1)=IBLA
C  WIPES OUT 'EP' IN 'REP'
2704      CALL SCANR
       V(IJ)=3.
      V(IJ+1)=-66.0
      IF(VX1.EQ.32.)VX1=1.
      IF(VX1.EQ.0)VX1=LPAR
      IF(VX2.EQ.0)VX2=LK-1
      V(IJ+2)=VX1+VX2*10000.
      KL=VX2
      IF(DUR(LK).LT.0)DUR(LK)=DUR(KL)
      IF(VX3.EQ.0)GO TO 4773
      L=VX3
      ML=LK+1
      DO 1018 KL=ML,L
      IF(LPAR.GT.NP(KL).AND.LPAR.LT.31)NP(KL)=LPAR
      IF(DUR(KL).LT.0)DUR(KL)=DUR(LK)
C  TO SET DUR WHEN DUPLICATING NOTES THAT END WITH 'END;;'
      V(I)=V(I-4)+10000.
      V(I+1)=3.
      V(I+2)=-66.
      V(I+3)=V(I-1)
1018      I=I+4
      GO TO 4773

2018      V(IJ)=3.
      V(IJ+1)=-66.
      V(IJ+2)=NW+LK*10000
      GO TO 4773

7720	V(I)=LK
	V(I+1)=3.
	V(I+2)=-67.
	ML=ML+4
	CALL SCANR
 	V(I+3)=VX1
	I=I+4
	L=VX1
	IF(NP(LK).LT.NP(L))NP(LK)=NP(L)
	IF(DUR(LK).LT.0)DUR(LK)=DUR(L)
	GO TO 4773
C   TYPE 'DUPL N;'   N=INST # TO BE DUPLICATED.
2114  FORMAT(I,72A1)
1899      CALL SCANR
      GO TO(1,2,3,4,5),ISUB

1106      KTMP=1
      TP=60.
      IAMP=0
      BW=BY
      ITMP=-1
      ISUB=5
      JA=-1
      GO TO 2016
3019      V(I)=990000.00
      V(I+1)=4.
      V(I+2)=VX1
      V(I+3)=VX2/TP
      V(I+4)=VX3/TP
      I=I+5
      BY=BW
C  SEPT 18, 70
      IF(VX1.EQ.0)GO TO 2308
      BW=BW+VX1
      V(I)=-9900.-BW
      I=I+1
      CALL BGSORT(BW)
9003      IF(IAMP.LT.0)GO TO 4003
2016      VX3=0
      VX2=0
      GO TO 1299
5      IF(VX2.NE.0)GO TO 105
C  'TEMPO/120*;'  OR  'TEMPO/1.5 72*;'  IS OK.
      VX2=VX1
      VX1=0
105      IF(VX3.EQ.0)VX3=VX2
      IF(VX2.LT.11.)TP=1.
      IF(J.EQ.ITMPO)GO TO 3019
        PCH(1,KTMP)=VX1
      PCH(2,KTMP)=VX2
      PCH(3,KTMP)=VX3
C   PCH(1)=TIME  (2)=MM1  (3)=MM2
      KTMP=KTMP+1
      IF(IAMP.EQ.0)GO TO 2016
4003      VX1=0
      IAMP=0
      VX2=VX3
      IF(J.EQ.ITMPO)GO TO 3019
      PCH(1,KTMP)=0
      PCH(2,KTMP)=VX2
      PCH(3,KTMP)=VX2
C   MM CAN BE FROM 11 UP  ITMPO FACTOR FROM 10 DOWN.  
C   UP TO 30 ITMPO CHANGES MAY BE MADE.   

1016      IA=I    
      IZ=1  
3100      V(I-2)=CODE+DF
      ISUB=3     
5016      IF(IAMP.GE.0)GO TO 1299
117      IF(IZ-2)3013,9004,9004
103      K=INP(ML)
      IF(K.EQ.ITT)GO TO 1106
      IF(K.EQ.ISEMI)GO TO 1014
      IF(K.NE.IBLA) GO TO 1899
      ML=ML+1
      GO TO 103
C@@@@@@@@ MAY 13,71 @@@@@@
C**********FEB 19,71
C  ABOVE 
3      IF(VX1.EQ.-99.)GO TO 4022
      IF(CODE.EQ.-22.)GO TO 2017
C************ MAY 19,71
        IF(CODE.LT.-23.OR.IZ/2*2.EQ.IZ)GO TO 17
C    CHECKS PAIRS OF NUMBERS FOR 'RTAP'
2017      IF(VX1.EQ.10000.)GO TO 17
      VX1=4./VX1
      IF(JJ.NE.1)GO TO 2014
      V(I)=VX1
      GO TO 114

1217      IF(VX1.EQ.10000.)GO TO 114
C    FOR "FINE" IN LIST
C   ABOVE EXTENDS RANGE TO GIVE HIGHEST NOTE A CHANCE
      V(I+1)=VX2
      IF(CODE.EQ.-36.)CALL RANR(V,I)
2217      I=I+1
C  SETS UP STRING OF RAND SELECTIONS
      GO TO 114
3217      V(I)=V(I-2)
      V(I+1)=RB
C  FOR SLASH REPTS OF RAND SELEC UNITS. ("REP" CAN'T BE USED!)
      GO TO 2217
C******** PUT IN ERROR TRAP FOR "REP" ETC. ******

2014      DO 9006 L=2,JJ
      IF(VX(L).EQ.0)GO TO 17
9006      VX1=4./VX(L)+VX1
      JJ=1
17      V(I)=VX1
      IF(CODE.EQ.-46..OR.CODE.EQ.-36.)GO TO 1217
C  JUMP IF STRING OF RAND SELECS.
      IF(JJ.EQ.1)GO TO 114
      L=VX(JJ)-1
      X=V(I)
      NL=I+1
      I=L+I
      DO 1017 K=NL,I
1017      V(K)=X
C   ADDS UP TOTAL   OF NOTES IN SEQ.
      IZ=IZ+L
      GO TO 114
1014      IF(CODE.EQ.-46..OR.CODE.EQ.-36.)GO TO 3217
      V(I)=RB
C   RB SAVES IT FOR SLASH REPEAT
114      RB=V(I)     
      I=I+1 
      IZ=IZ+1     
      GO TO 5016    
4022      JC=VX2+.3
      JD=VX3-.5
      IF(JJ.EQ.2)JD=1
C********* MAY 19,71   ----MANY LINES ABOVE.
      IZ=IZ+JC*JD 
C   JC=HOW MANY TIMES,  JD=HOW MANY NOTES 
      DO 1005 K=1,JD    
       NL=I+JC-1  
      DO 2005 L=I,NL    
2005  V(L)=V(L-JC)
1005      I=I+JC  
      RB=V(NL)
C  RB SAVES DATA FOR SLASH REPEAT FEATURE.
      GO TO 5016  

9004      IF(ITMP.EQ.0)GO TO 3013
C*********** JUNE 1,71
      KA=1  
      IC=1  
      K=0   
      J=1
      Z=0   
      RC=0  
9007      Y=PCH(3,IC)/TP
      X=PCH(2,IC)/TP
      Z=PCH(1,IC) 
      CALL SQYY(YY,X,Y,Z)
      XT(1)=X
      XA=RA 
      RD=1  
      RB=0  
      ZZ=Z  
7020      RA=V(IA+K)    
      IF(RA.EQ.10000.)GO TO 3013
4020    CALL ACCL(RA,KA,RC,XA,Z,Y,X,XT(J),YY,RB,W)
      IF(RC.NE.0)GO TO 1011   
      V(IA+K)=RA*RD     
      IF(K.EQ.IZ)GO TO 3013     
C*********** JUNE 1,71
1011      IF(T5.EQ.1)GO TO 2011     
      K=K+1 
      IF(ZZ.NE.0)Z=Z-W  
      IF(Z.GT.0.OR.RB.EQ.-1.)GO TO 7020     
      IC=IC+1     
      IF(RB.EQ.W)GO TO 9007
      KA=0  
      K=K-1 
      GO TO 9007     
C********* MAY 13,71  OMITS REPEATED RHY. FEATURE.
3013      V(I)=CVT
      I=I+1
C  ADDS ONE FOR CONVRT CODE (0, -1 OR 1)
      X=I-IJ
      V(IJ+2)=X-4.
      V(IJ)=X*ALL
      GO TO 4773

2011     CALL ACCL2(XA,RA,K,ZPAR,CHN,ZZ,KA,X,Y,Z,YY,PR)
      GO TO 4020
      END
C CHECK P1, PP1, PX1, P1B **********
	SUBROUTINE RUNIT
      DIMENSION VY(30),VZ(30),PX1(25),IPT(25,31),NCNT(25,32)
     1,P1(25),IV(2000),JPT(775)
C  JPT = 25*31 (EQUIV. TO IPT)
      COMMON/X/P(30),J,L,CNT(25),BT,MK,VX(35),PL(30),DF,DUR(26),TF,
     1XT(25),ROFF(25),V(2000),NP(25),PCH(25,32),INST(26),IXIN,NINS,IALL,
     1DURX,AMPFAC,IT(30),I,OP1,INUM(25),BG(80),INP(72),TP,
     1CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
     1,LIST(78),INVIS(25),RDEV(25),IBLA,KSLA,ICOM,ISEMI,IMIN,ISTAR
     1,IEL,IPLUS
      COMMON/SC/ML,JJ,NNUM,NFLG,JA,ISUB,CODE,IAMP,M
      COMMON /Q/ BNW(40),NWZ
      COMMON/RW/NWRITE,NDEC,LPT,DEBUG,KZY
      EQUIVALENCE (IV,V),(VX2,VX(2)),(VX1,VX(1)),(X,LIST(1)),
     1(Y,LIST(2)),(PL4,PL(4)),(VX3,VX(3)),
     1(Z,LIST(3)),(NL,LIST(4)),(AC,LIST(5)),(ZPAR,LIST(6)),
     1(VX4,VX(4)),(VX5,VX(5)),(VX6,VX(6)),(TBG,LIST(7)),(IDF,LIST(8))
     1,(IF,ISCA(6)),(JPT,IPT),(PAR,LIST(9)),(T,LIST(10)),(K,LIST(11))
     1,(PP1,P(1)),(P2,P(2)),(P3,P(3)),(VZ2,VZ(2)),(P4,P(4)),
     1(IX,LIST(12)),(NW,LIST(14)),(NWX,LIST(15)),(TDUR,LIST(16))
     1,(T2,LIST(17)),(T4,LIST(18)),(N,LIST(19)),(RD,LIST(20))
      DATA IGEN/'GEN'/,IVAR/'VAR'/

2337      T=0
      NWZZ=0
      IAMP=0
      IT3=0
      PR=0
      K=1
      IX=0  
      BG(NINS+1)=19999.
4337      IF(V(I-1).EQ.-9900.-BY)I=I-1
      V(I)=-19899.
      PP1=0
      T6=10000.   
      DO 2118 K=1,NINS  
      ROFF(K)=0
C********* FEB 17,71
      M=NP(K)
      IT(K)=0 
      IPT(K,31)=0
      NCNT(K,31)=1
      DO 2118 L=1,M
      NCNT(K,L)=1
2118      IPT(K,L)=0
      DO 5013 K=1,IXIN
5013      X=RAND(0.0,0.0)
      ISLAC='FOR01'
      REWIND 1
C****** FOR PDP10 ********
      CALL OFILE(NDEC,ISLAC)
      NW=1    
      NWX=0
      TDUR=0
      A=0
      T2=1. 
      T4=1. 
      T5=0  
      J=1
      MK=0  
C   IS THE ABOVE NEEDED?
      IF(MX.NE.3)GO TO 40021
C  THIS IS FOR PROOF READING - NOT ACTIVATED HERE!!!!
      K=4
10023      N=AMOD(V(K),100.0)/-11.
      IF((N.NE.2.AND.N.NE.3.AND.N.NE.4).OR
     1 .V(K-2).LT.10000.)GO TO 10021
      J=V(K+1)
      IF(J.EQ.1)GO TO 10024
      IF(N.EQ.3.AND.V(K+J+1).EQ.101.)J=J-1
      N=V(K-2)
      L=N/10000
      M=N-L*10000
      TYPE 10022,INST(L),M,J
10024      K=K+ABS(V(K-1))
10021      K=K+1
      IF(K.LT.I)GO TO 10023
40021      IF(DEBUG.EQ.0)GO TO 1002
C  PRINTS V ARRAY ON LPT FOR DEBUGGING.
      N=1
40022      K=N+1
      IF(N.GT.I)CALL EXIT
      X=V(N)
      IF(X.EQ.-199..OR.X.EQ.-99.)GO TO 40024
      IF(X.GE.0)GO TO 40023
      WRITE(LPT,4002)X
      N=N+1
      GO TO 40022
40024      J=N+1
      GO TO 40025
C  FOR 'SECTIONS'
40023      J=ABS(V(K))+K-1
40025      PRINT 4002,(V(K),K=N,J)
      N=J+1
      GO TO 40022
10022      FORMAT(1XA5,' P',I2,'  HAS ',I3,' ITEMS.')
4002  FORMAT(10F12.3)
1002      IF(IDALL.LT.0)GO TO 600
      X=DUR(IDALL)
      DO 2002 K=1,NINS
2002      IF(DUR(K).LT.0)DUR(K)=X

C ***** SORTER *************************  
C  *******  OUTPUT LOOP FROM HERE ON  ********
600      IL=0     
C********** BELOW IS FOR 'SECTIONS'
      KODE=0
      NWX=NWX+1
      MK=MK+1     
      Y=BNW(NW)   
723      IL=IL+1  
3723      Z=V(IL)     
      IF(Z.EQ.-19899.)GO TO 732
      IF(Z.NE.-9900.-Y)GO TO 723     
C********** BELOW IS FOR 'SECTIONS'
      IF(V(IL-2).EQ.-199.)KODE=IV(IL-1)
2723      IL=IL+1   
729      K=IL+2
      MOT=V(IL+1)
      RD=V(K)
      IF(RD.EQ.-67.)GO TO 3726
      RB=V(IL)
C************ DOWN TO 4150 IS FOR 'SECTIONS'
      IF(RB.NE.-99.)GO TO 4150
      KODE=IV(K-1)
2160      IF(KODE.EQ.0)GO TO 723
        WRITE(LPT,9150)KODE
      KL=Y/10000.
      RB=Y+KL*10000.
      DO 5150 KL=1,I
      IF(V(KL).NE.-199..OR.IV(KL+1).NE.KODE)GO TO 5150
      IV(K-1)=0
C  WHEN 'PLAY' HAS BEEN FOUND, INDENTIFIER CHNGED TO 0
      RD=V(KL+2)+9900.
      JDO=KL+2
      DO 6150 L=JDO,I
      M=V(L)/(-9900.)
      IF(M.NE.1)GO TO 6150
      RA=RB+RD-V(L)-9900.
      V(L)=-9900.-RA
C  UPDATES BG TIMES INSIDE SECTION.
      CALL BGSORT(RA)
C7150      IF(RA.EQ.BNW(KA))GO TO 6150
C  UPDATES LIST OF CHANGE TIMES.
6150      IF(V(L).EQ.-299.)GO TO 160
5150      CONTINUE
160      IL=1
      GO TO 3723
C***********  ABOVE IS FOR 'SECTION' REPEATS
4150      LK=RB/10000.+.2
      IF(LK.GE.98)GO TO 7700
      LP=RB-LK*10000
C   LK=INST #   LP=PARAM #
      LN=IPT(LK,LP)
      IPT(LK,LP)=IL+2
      IF(RD.EQ.-66.)GO TO 726
      IF(RD.EQ.-55..OR.RD.EQ.-56.)GO TO 1726
      IF(RD.EQ.-23)GO TO 6700

2727      ML=IPT(LK,LP)
      IF(MOT.GT.0)GO TO 3727
C  USE NEG WDCNT FOR 'ALL'
      M=LK+1
      DO 4727 KL=M,NINS
      IF(NP(KL).LT.LP.AND.LP.LT.31)NP(KL)=LP
      IPT(KL,LP)=-(LK+(LP-1)*KZY)
      NCNT(KL,LP)=10000
4727      IF(DUR(KL).LT.0)DUR(KL)=1000.
C  ASSUMES THAT DURATIONS ARE SET IN 'NOTES'.
C  AFTER 'ALL' IS USED ONCE IT WORKS LIKE DUPL OR REP.
C ABOVE CHANGED TO BELOW DEC.6,72.  'ALL' WAS OMITTING 1ST ITEM.
      GO TO 727
C 'MOVE' WITH 'ALL' KEEPS ORIGINAL TIME DATA REGARDLESS OF BG TIMES.
3727      IF(V(IL).NE.V(LN-1).OR.LN.EQ.0)GO TO 727
CC ************  JAN 20 ***********
      DO 1727 L=1,NINS
      DO 1727 KL=1,NP(L)
      IF(LN.NE.IPT(L,KL))GO TO 1727
      NCNT(L,KL)=10000
C ******* JAN 29,70
      IPT(L,KL)=ML
C RESETS POINTERS FOR DUPL AND REP INSTS.
C *** 'ALL' WILL NOT WORK WITH RAN TF.!!!!!*******FEB 21,73
1727      CONTINUE
727      NCNT(LK,LP)=10000
C******** MAY 13,71 RHY REP. FEATURE OMITTED.
2150      IF(MOT.LT.0)MOT=-MOT
      IL=IL+MOT+1
3150      IF(V(IL).LT.0)GO TO 3723
      GO TO 729
726      RB=V(IL+3)
      K=RB/10000.
      L=RB-K*10000
      IPT(LK,LP)=-(K+(L-1)*KZY)
      GO TO 2727
3726      LK=V(IL)
      M=V(K+1)
      KL=NP(M)
      DO 4726 L=1,KL
      IPT(LK,L)=IPT(M,L)
      IF(IPT(M,L).NE.0)NCNT(LK,L)=10000
C****** JUN 29 71  (LK,L) WAS (L,K)....???????
4726      CONTINUE
      IPT(LK,31)=IPT(M,31)
      K=0
      GO TO 2150
C   ABOVE IS FOR DUPLICATION ROUTINE   NEXT ADJUSTS TIMES FOR 'RTAP'
6700      KL=IL+V(IL+1)+1.3
      RC=V(K-2)
1770      IF(V(KL).LT.0)GO TO 700
2700      KL=KL+V(KL+1)+1.3
      GO TO 1770
700      KL=KL+1
      IF(Z.NE.V(KL-1).OR.V(KL).NE.RC)GO TO 2700
      KL=KL+3
      KN=IL+3
      LN=V(KN)+.3
      DO 3700 L=1,LN,2
      RA=V(L+KN)
      KA=V(L+KN+1)+.3
      RB=0
      DO 4700 LP=1,KA
4700      RB=RB+V(KL+LP)
      DO 5700 LP=1,KA
5700      V(KL+LP)=V(KL+LP)/RB*RA
      V(KL+KA)=V(KL+KA)+.00030
3700      KL=KL+KA
      GO TO 2150

C  BELOW FOR 'TEMPO' SETUP
7700      T2=V(IL+4)
      T1=V(IL+3)
      TBG=Y
      TDUR=V(IL+2)
      CALL SQYY(AC,T1,T2,TDUR)
8700      IF(TDUR.EQ.0)TDUR=10000.
      T5=1.
      T6=TBG+TDUR
      IT3=1.
      IF(LK.EQ.98)IT3=IL+2
      T4=1.
      GO TO 2150
C*************** ANY WDCNTS DOWN FROM HERE. *********
C   NEXT ADJUSTS 'MOVE' TIMES IF BG IS AT A NOTE NUMBER.
1726      IF(V(IL-1).GT.-19000.)GO TO 2727
      RA=BT
      K=IL-1
2726      V(K)=-9900.-RA
      L=K+5
      RB=V(L)+V(L-1)
      V(L-1)=RA
      K=K+V(K+2)+2
      IF(V(K).GT.-19000..OR.V(K+1).NE.V(IL).OR.
     1 V(K).NE.-9900.-RB)GO TO 2727
      RA=RA+V(L)
      CALL BGSORT(RA)
      GO TO 2726
C  CONVERTS BG TIME OF NOTE NUM TO REAL TIME.  DOESN'T WORK WITH -66!
C   NOW WE BEGIN ON!! NOTE NUM. NOT AFTER NOTE NUM.
732      DO 2606 K=NW,NWZ
2606      BNW(K)=BNW(K+1)
      NWZ=NWZ-1
      IF(NWZ.EQ.0)GO TO 2111
      IF(NWZZ.EQ.1)GO TO 5111
      NWZZ=1
      IF(NWZ.EQ.1)GO TO 1111
      DO 3111 K=1,NWZ
      IF(BNW(K).LT.1000.)GO TO 3111
      X=BNW(NWZZ)
      BNW(NWZZ)=BNW(K)
      BNW(K)=X
      NWZZ=NWZZ+1
3111      CONTINUE
5111      IF(NWZZ.EQ.NWZ)GO TO 1111
      L=NWZZ+1
      X=BNW(NWZZ)
      DO 4111 K=L,NWZ
      IF(BNW(K).GT.X)GO TO 4111
      RA=BNW(K)
      BNW(K)=X
      X=RA
4111      CONTINUE
      BNW(NWZZ)=X
      GO TO 1111
9150      FORMAT(/3X'******* SECTION ',A1)
2111      NWZ=-1
C  ABOVE ORDERS BNW DATA TO SAVE TIME AT 10 ON PG2.
1111      K=NWX-1
      IF(NWX.NE.1)GO TO 1486
2      PRINT 111,I,IXIN,CVTX,TF
111      FORMAT(//' ***** SCORE *****',10X,
     1'V ARRAY=',I4,'/2000   RANDOM NUMBER =',I6,4X,'SRATE=',F6.0,
     14X,'TEMPO FACTOR=',F6.2/)
1486      IF(NWX.GT.1.AND.IT(J).NE.-3)PRINT 3154,K,Y  
      IF(IT(J).EQ.-3)PRINT 5154,K,BX,INST(J) 

      DO 602 K=1,NINS   
      IF(DUR(K).LT.0)CALL EXIT
48      LK=INST(K)
C**********************
      IF(NCNT(K,31).NE.10000.AND.NWX.GT.1)GO TO 8826
      IJ=IPT(K,31)
      NCNT(K,31)=1
      X=0
      IF(IJ.NE.0)X=V(IJ+2)
      RA=DUR(K)
      IF(RA.GT.10000.)GO TO 83
      PRINT 5396,LK,INUM(K),X,RA
      GO TO 8826
5396      FORMAT(6XA4,'= INST NUM',I3,12X,
     1'RANDOM TF =',F4.2,9X,'DURATION =',F6.2,'"') 
7396      FORMAT(6XA4,'= INST NUM',I3,12X,
     1'RANDOM TF =',F4.2,9X,'DURATION =',F5.0,'NOTES')
4396  FORMAT(12X'% RANDOM RESTS   DUR=',F7.3,'", FROM',F6.3,' TO',F6.3)
485      FORMAT(35X'% RANDOM RESTS = ',F4.2)     
83      RA=RA-10000.
      PRINT 7396,LK,INUM(K),X,RA    
8826      CONTINUE
C  ABOVE IS TEMPORARY********
602      CONTINUE
715      IF(IT3.NE.1.)GO TO 1602
      RA=T1*TP
      RB=T2*TP
      WRITE(LPT,6154)RA,RB,TDUR  
      IT3=0  
1602      IF(NWX.EQ.1)GO TO 315
      IF(IT(J).EQ.-3)GO TO 1108
C*********** JUNE 1,71
6154      FORMAT(' TMP=',F7.3,' TO',F8.3,' DURING',F6.2,' SECS.'/)
5154      FORMAT(/' << CHANGE',I3,' BEGINS ON NOTE',F5.0,1XA5,' >>'/)
902      FORMAT(1XA5/)  
3154      FORMAT(/' <<   BASIC TIME OF CHANGE',I3,' IS',F8.3,'" >>'/)
4154      FORMAT(' THE FIRST',F9.4,'" ARE OMITTED'/)  
C*********** JUNE 1,71
      IT(J)=IT(J)/10
      GO TO 1108
315      IF(OP1.NE.0)WRITE(LPT,4154)OP1 
1601  IF(NWX.GT.1) GO TO 1108
      IF(TF.GT.10.)TF=TF/60.
      TF=1000./TF
9926      DO 5015 K=1,NINS    
      IQ(K)=BG(K)*10000.
      BG(K)=0
      INP(K)=0
      PX1(K)=0     
      IF(DUR(K).LT.10000.)DUR(K)=DUR(K)-.0001
C******* FEB. 16,71   FOR ROUND-OFF NONSENSE
5015      CNT(K)=0
      BW=0 
      CVTX=511./CVTX
      GO TO 500

752      FORMAT(1X15A5)
1108      M=0 
      JC=0  
      IF(NWZ.LT.0)GO TO 1740
C  NWZZ IS SET AT 3111 IN SORTR.
      DO 740 K=1,NWZZ
      X=BNW(K)    
      IF(X-.0001.GT.BT.OR.X.LE.BW.OR.BW.LT.0)GO TO 2740
      IT(J)=IT(J)*10
      NW=K  
      GO TO 600   
2740      IF(X.LT.1000..OR.X-J*10000.NE.CNT(J)+1.)GO TO 740
      X=BT+PR     
      NW=K  
      BX=CNT(J)+1.
      IT(J)=-3    
      GO TO 600   
740      CONTINUE 
1740  IT(J)=0     
31      KL=1
2031      CNT(J)=CNT(J)+1   
      ICT=CNT(J)  
C   INSERT TRAP HERE FOR OVERLAP OF RESTARTED INSTS.******
      NPA=NP(J)   
      PP1=PX1(J)  
      IF(BT.GE.DUR(J))GO TO 5174    
      IF(IQ(J).EQ.0)GO TO 200
      P2=-IQ(J)/10000.
      IQ(J)=0
      CNT(J)=-1
      ICT=-1
      GO TO 4203

C   MK IS FLAG FOR RESTS
200      MK=0
      IF((BT.EQ.0.AND.J.EQ.1).OR.IPT(J,1).EQ.0)GO TO 203    
      KN=IPT(J,1)-1
      IF(KN.GT.0)GO TO 12033
12032      KN=JPT(-KN)
      IF(KN.LT.0)GO TO 12032
      KN=KN-1
C  FOR 'ALL' IN P32.  FOLLOWS UP ON POINTERS TO POINTERS!
C   SOMEDAY PUT PX1(32) IN WITH OTHER PARAMS BELOW!!!!
12033      IJ=V(KN)
      IF(IABS(IJ).EQ.4)GO TO 1203
C   'IABS' IS FOR -4 USED WITH 'ALL'(ABS(V(KN)) IN MUS10 VERSION.)
        Z=(BT+9900.+V(KN-2))/V(KN+2)
C******* FEB 19,71
      IF(Z.GT.1.)Z=1.
      Y=V(KN+3)
      X=(V(KN+4)-Y)*Z+Y
C******* FEB 19,71
      GO TO 204
1203      X=V(KN+3)
204      Y=RAND(0.0,1.0)
      IF(Y-X.LT.0)MK=-1

203      DF=1.
C   DF=DUTY FACTOR 
      DO 2155 L=2,NPA
      VX(L)=0
      ISUB=0
C   SUBR FLAG
      IDF=0 
C    IDF IS DUTY FACTOR FLAG
      IJ=IPT(J,L)
12031      IF(IJ.LT.0)IJ=JPT(-IJ)
      IF(IJ)GO TO 12031
C  FOLLOWS UP ON POINTERS TO POINTERS!
      PM=1.
      IF(IJ.GT.1)GO TO 2157
      P(L)=0
      GO TO 21551
C 7/73
2157      LN=IJ+2
      NM=ABS(V(IJ-1))+LN-4
      NL=V(IJ)
      IF(NL.GT.-200)GO TO 372
      ISUB=-1
      NL=NL+200
C  FOR SUBROUTINES
372   IF(NL.GT.-100)GO TO 272
      IDF=-1
      NL=NL+100
C  DEC.6,72  FINDS DUTY FACTOR PARAM
272      VIJ2=V(IJ+1)
      KN=NL/(-11)
      IF(KN.EQ.0)GO TO 1100
      GO TO (61,62,62,62,65,65,67,68),KN
1100      IF(VIJ2.EQ.1.)GO TO 1200
      ML=3
1900      KA=1
      VY(1)=0
      DO 1156 K=LN,NM,ML
      VY(KA+1)=V(K)+VY(KA)
1156      KA=KA+1
      X=RAND(0.0,1.)
      DO 1157 K=2,11
      IF(X.GT.VY(K))GO TO 1157
      KL=K-1
      IF(KN.EQ.7)GO TO 6157
      GO TO 1400
1157      CONTINUE
1400      LN=IJ+3*KL
1462      RA=V(LN)
      IF(RA.EQ.10000.)GO TO 5174
C   FOR "FINE" IN RLIST
      RB=V(LN+1)
      PAR=RAND(RA,RB)
1300      IF(NL.NE.-1)PM=2.
C  IF 2 THEN PRINTS A5
      GO TO 1155
1200      PAR=V(IJ+2)
      GO TO 1300
C   NEXT IS FOR SUBROUTINE AND QUAD CALLS
61      X=P2
      CALL SUBR
      IF(L.EQ.2)GO TO 4203
      IF(X.EQ.P2)GO TO 21552
      PP2=P2
      PR=P2
      GO TO 21552
C  ABOVE IS FOR P2 CHANGES IN SUBROUTINE
C  TF,TEMPO,CONDUCT WILL AFFECT P2 ONLY WHEN P2 CALLS THE SUBR.,
C  ALL 'TEMPO' CHANGES WILL BE IGNORED!! (THEN DUR. IN SECS. MUST
C  BE SET TO 'REAL TIME'.)

C   FOLLOWING IS FOR STRINGS OF VALUES.  
62      KL=NCNT(J,L)+1
      IF(KL.GT.VIJ2)KL=1 
      IF(NL.NE.-46.AND.NL.NE.-36)GO TO 162
C   THIS PART FOR STRINGS OF RAND SELECTION
      LN=KL+IJ+1
      KL=KL+1
      IF(KL.GT.VIJ2)KL=1 
      NL=NL+45
C   FOR NUMBERS ONLY SO FAR(THIS MAKES NL=-1.  FOR NOTES, =9)
162      NCNT(J,L)=KL
      IF(NL.GT.-22)GO TO 1462
C   JUMP RAND SELECTION
      PAR=V(IJ+KL+1)
C********** MAY 13,71 RHY REPEAT FEATURE OMITTED.
C************************
      IF(KN.NE.3)GO TO 1155
C*******JULY 16,71      IF(PAR.EQ.101.)GO TO 5174
      IF(PAR.EQ.10000.)GO TO 5174
      PM=2.
      IF(PAR.GT.100..OR.PAR.LT.1.)PM=3.
      IF(PAR.EQ.85.)MK=-1
      GO TO 5155  
65      W=-9900.-V(IJ-3)
C  W=BG TIME OF MOVE.
      X=ABS(V(IJ-1))
      IF(NL.EQ.-56.OR.NL.EQ.-58)PM=2.
      Z=(BT-W)/VIJ2
C  Z= % OF WAY THROUGH.
      IF(Z.GT.1.)Z=1.
      Y=V(LN)
      W=V(IJ+3)
      IF(X.EQ.8.)W=V(IJ+4)
C  X=WD CNT.  =8 IS FOR RAND. RANGES
      IF(NL.LT.-58)GO TO 16002
      PAR=(W-Y)*Z+Y
      IF(X.EQ.8.)GO TO 1600
      GO TO 1155
C************** JUNE 1,71
C   FOR "MOVX"
16002      PAR=RMOVX(W,Y,Z)
C  SEE FUNCTION RMOVX 6/74 -- CAN'T HAVE -20→+20, ETC., -20→-40 OK.
C  THE .01 IS NEEDED FOR MOVE TO OR FROM 0.
      IF(X.NE.8.)GO TO 1155
      W=V(IJ+5)
      Y=V(IJ+3)
      X=RMOVX(W,Y,Z)
      GO TO 16003
C  NEXT IS FOR MOVING RAND RANGES.
C1600      PAR=(V(IJ+4)-Y)*Z+Y
1600      W=V(IJ+3)
C*********** BACK TO 65 IS NEW.   FEB. 15,71
      X=(V(IJ+5)-W)*Z+W
C************ JUNE 1,71   
16003      PAR=RAND(PAR,X)
      GO TO 1155
67      LN=IJ+3
      NM=LN+VIJ2-1
      ML=1
      GO TO 1900
4155      K=(PAR-9999.0)*100.+.1      
      P(L)=P(K)
      IF(L.EQ.2.AND.K.EQ.2)P2=PX2
C  PX2=LAST UNPROCESSED VALUE OF P2 (+ OR -) 7/74
      PM=PL(K)
      VX(L)=VX(K)
      GO TO 21551
C   ANY # OVER 9999. REPEATS ANOTHER PARAM.(9999.21 REPEATS P21)
6157      LN=V(LN-1)
      DO 1068 K=1,KL
1068      IF(K.LT.KL)LN=LN+V(LN)+1
2068      PM=LN+1
      PAR=LN+V(LN)
      GO TO 5155
68      KL=NCNT(J,L)
      IF(KL.EQ.0.OR.KL.EQ.10000)KL=VIJ2
      PM=KL+1
      PAR=PM+V(KL)-1
      KL=PAR+1
      IF(V(KL).EQ.10000.)DUR(J)=BT
C  'END' OR 'FINE' IN 'LIT' LIST.
      IF(V(KL).EQ.999.)KL=IJ+2
      NCNT(J,L)=KL
      GO TO 5155
C ******* JAN 20  *************
1155      IF(PAR.EQ.10000.)GO TO 5174
C  TYPE 'END' OR 'FINE' AS LAST IN ANY STRING TO SET DURATION.
      IF(PAR.GT.9999..AND.PM.EQ.1.)GO TO 4155
C****JULY 16,71 1155      IF((PAR.GT.9999.).AND.(PM.EQ.1.))GO TO 4155
5155      P(L)=PAR
      ML=ABS(V(IJ-1))-2
      VX(L)=V(ML+IJ)
21551  PL(L)=PM
      IF(ISUB.LT.0)GO TO 61
      IF(L.EQ.2)GO TO 4203
C**** WHAT ABOUT 'POINTERS TO POINTERS' AND IJ ?????

21552      IF(IDF.GE.0)GO TO 2155
      DF=PAR
      IDF=0
2155    CONTINUE

      GO TO 1170  
4203      PR=P2 
      PX2=P2
C TO SAVE THE UNPROCESSED P2 FOR 'P2 P2;' IN INPUT. 7/74
      IF(T5.EQ.0)GO TO 7203   
      IF(IT3.LE.1.OR.BT.LT.TBG+TDUR)GO TO 6203
3155      IT3=IT3+3
      TBG=TBG+TDUR
      TDUR=V(IT3)
      IF(BT.GE.TBG+TDUR)GO TO 3155
      T1=V(IT3+1)
      T2=V(IT3+2)
      CALL SQYY(AC,T1,T2,TDUR)
6203      RA=PR 
      IF(BT.EQ.TBG)XT(J)=T1
      K=IT3
      RC=0  
      RD=1  
      KA=1  
      RB=0  
      Z=TDUR+TBG-BT      
      X=T1  
      Y=T2  
      YY=AC
      CHN=TBG      
      ZZ=TDUR      
4020   CALL ACCL(RA,KA,RC,XA,Z,Y,X,XT(J),YY,RB,W)
      IF(RC.EQ.0)GO TO 8203
2011   CALL ACCL2(XA,RA,K,ZPAR,CHN,ZZ,KA,X,Y,Z,YY,PR)
      GO TO 4020
8203      P2=RA*RD    
7203      P2=P2*T4
      X=P2*TF
C  P2 IS KEPT WITHOUT TF*
      K=X+.5
      IF(X.LT.0)K=X-.5
72031      ROFF(J)=ROFF(J)+K-X
      IF(ABS(ROFF(J)).LT.1.)GO TO 7155
      Y=1.
      IF(ROFF(J).LT.0)Y=-1.
      K=K-Y
      ROFF(J)=ROFF(J)-Y
C  ROUND-OFF GAP WILL NOT EXCEED .001
C*********** FEB 17,71
7155      PP2=K/1000.
C   AVOIDS ROUND-OFF PROBLEMS
      IF(IPT(J,31).EQ.0)GO TO 6155
      IF(ICT.LT.0)GO TO 1170
	X=V(IPT(J,31)+2)/2.
	Y=RAND(-X,X)
	IF(PP2.GE.0)GO TO 615
	MK=-1
	PP2=-PP2
615	PP2=PP2-RDEV(J)+Y
      RDEV(J)=Y
C  TOTAL RAND DEV. WON'T EXCEED P31
C  SET P31 TO .0001 TO BRING VOICE BACK TO EXACT TIME(0 WON'T DO IT)

      K=PP2*1000.+.5
C****** CHECK THIS OUT  1/10/72 :::::::
61551      PP2=K/1000.
C   NEVER MORE THAN .1( DEVIATION WITH RAN TF. (RTF=.05)
6155      IF(ICT.LT.0)GO TO 1170
      GO TO 2155
1170      IF(MK.LT.0.OR.PP2.LT.0)GO TO 2022   

      ZPAR=PP1
C   WHY DO I USE P1B INSTEAD OF PP1 LATER ON???? 4/73
      PX1(J)=PP1+PP2
C   ZPAR IS USED HERE WHEN OPX1(OMIT) IS .GT.0. OMIT IS IN REAL TIME.
      LK=INST(J)
      IF(PP1.LT.OP1)GO TO 2612
      IF(INVIS(J).NE.0)GO TO 2170
1204      IF(PL4.NE.1.)GO TO 2170
      P4=P4*AMPFAC
      L=0
      INP(J)=P4
      DO 1021      K=1,NINS
1021      IF(PX1(K).GT.PP1)L=L+INP(K)
      IF(L-IAMP-1.LT.0)GO TO 2170
      IAMP=L
      AMPTIM=PP1
2170      IF(MX.EQ.3)GO TO 2612
C  MX=3 IS FOR PROOF READING -- NOT ACTIVATED HERE!!!!
C ********* MAY 17,71
      PP1=PP1-OP1     
C   PUTS SPACES BETWEEN NOTES .GT. .05( APART
      IF(A.GE.PP1)GO TO 3170
      WRITE(LPT,902)
      A=PP1+.05
3170   X=INUM(J)
      KL=0
      NL=3
      Y=1
	IF(INVIS(J).EQ.0)GO TO 4170
	X=P3
	IF(INVIS(J).LT.0)GO TO 3021
	NL=2
      Y=4
      L=IVAR
      GO TO 7170
3021	Y=3.
	L=IGEN
C  Y=3 FOR 'GENS'. Y=4 FOR 'VARS'.
	DO 5170 K=6,30
	IF(P3.EQ.2.)GO TO 5170
	IF(P(K).EQ.511.)NPA=K
5170	VZ(K)=0
7170	DO 6170 K=2,30
	ML=K+2
	VX(K)=VX(ML)
	IF(ML.GT.NPA)GO TO 5902
	Z=P(ML)
	IF(PL(ML).EQ.2)CALL TMPSC
C  RETURNS FREQ. IN HERTZ FOR 'Z'
	GO TO 6170
C  Z MUST BE FIXED ABOVE FOR RAN SELEC OF TMPRD SCALE.
5902	Z=0
6170	VZ(K)=Z
	NPA=NPA-2
	GO TO 8170

4170      IF(PL(3).EQ.2.)KL=P3+.0001
C  .0001 FOR ROUND-OFF???? 4/73
      DO 2021 K=3,30
      IF(K.GT.NPA)GO TO 4902
      Z=P(K)
      IF(PL(K).EQ.2)CALL TMPSC
      GO TO 2021
4902      Z=0
2021      VZ(K)=Z
      IF(DF.GT.0)GO TO 6021
      VX2=-DF
      IF(VX2.GT.PP2)VX2=PP2
C NEG. DF=FIXED NOTE DUR. NOT.GT.PP2   7/74 COLGATE -AND BELOW
      GO TO 7021
6021   IF(DF.LT.100)GO TO 8021
C DF>100 = FIXED REST AREA BEFORE NEXT ATTACK.
      VX2=PP2-DF+100.
      IF(VX2.LE.0)VX2=PP2/2.
C NO NEG. TIME VALUES ALLOWED.
      GO TO 7021
8021      VZ2=PP2*DF
C  DUTY FACTOR CONVERSION
7021      L=INST(J)
8170      IF(KL.GT.0)WRITE(LPT,2902)L,PP1,X,VZ2,VZ(3),
     1 SCAL(KL),(VZ(K),K=4,11),J,L,ICT,BT
      IF(KL.EQ.0.)WRITE(LPT,9902)L,PP1,X,(VZ(K),K=2,11),J,L,ICT,BT
C'NOTES' MAY BE USED IN P3-30 BUT LETTER NAME WILL ONLY PRINT FOR P3!
      IF(NPA.GT.11)WRITE(LPT,3902)(VZ(K),K=12,23),J,L,ICT,BT
C  VX(K) HOLDS CONVERSION FLAG.
      VY(2)=VZ2
      DO 1902 K=NL,NPA
      Z=VZ(K)
      IF(VX(K).EQ.1.)Z=CVTX/Z
      IF(VX(K).EQ.-1.)Z=CVTX*Z
1902      VY(K)=Z
      NPA=NPA+1
      VY(NPA)=CVTX/VZ2
C   LAST PARAM NOW CONVERTED AS NOTE DUR.   PASS3 WILL READ NEXT.
      IF(Y.NE.1.)NPA=NPA-1
      L=NPA+2
      WRITE(LPT,3612)L,Y,PP1,X,(VY(K),K=2,NPA)
      WRITE (NWRITE)L,Y,PP1,X,(VY(K),K=2,NPA)
2612      PP1=ZPAR     
         GO TO 21 
3612      FORMAT(I3,F3.0,F7.2,F3.0,F7.2,30F9.3)
2902  FORMAT(1XA4,1XF7.2,F3.0,F7.2,F8.2,'(',A3,')',8F8.2,'<',I2,1XA4,
     1' <',I3,F7.2)
9902  FORMAT(1XA4,1XF7.2,F3.0,F9.2,3X9F8.2,'<'I2,1XA4,' <',I3,F7.2)
3902  FORMAT(3X12F8.2,'<'I2,1XA4,' <',I3,F7.2)    
C   PRINTS RESTS  
2022      PP2=ABS(PP2)
C   IN THIS VERSION TYPE 'R' FOR RESTS IN ANY PARAM BUT PP2. 
C   FOR RESTS IN SEQS. TYPE -DUR.   
C   WHEN RANDOM RESTS ARE CHOSEN, SEQS. MISS NOTES.
C    RAN RESTS ARE TOUCHED BY SUBROUTINES ONLY BY SETTING IREST!!
      INP(J)=0
      PX1(J)=PP1+PP2
      IF(PP1.LT.OP1)GO TO 21   
      X=PP1-OP1  
      IF(A.GE.X)GO TO 121
      WRITE(LPT,902)
      A=X+.05
121      WRITE(LPT,104)INST(J),X,PP2,J,ICT
21      PR=ABS(PR)
      BG(J)=BT+PR 
      IF(ICT.EQ.DUR(J)-10000.)GO TO 5174 
      IF(BG(J).LT.DUR(J))GO TO 500  
5174      BG(J)=19999. 
      DO 3174 K=1,NINS  
C INSRTS CANT FOLLOW LST REG NOTE.(ADD RST IF INSRT AT END NEEDED.)    
3174      IF(BG(K).LT.19999.)GO TO 500     
      GO TO 175   
C   CHOOSES INST WITH NEXT BEGIN TIME.    
500      J=1   
      BW=BT
      IF(NINS.EQ.1)GO TO 3022
5022      IF(BG(J).NE.19999.)GO TO 4022
      J=J+1
      GO TO 5022
4022      DO 22 K=2,NINS
22      IF(PX1(J).GT.PX1(K).AND.BG(K).NE.19999.)J=K
3022      BT=BG(J)    
      IF(BT.EQ.19999..OR.PX1(J).GE.DURX)GO TO 175
      IF(CNT(J).GT.0)GO TO 1022
      IF(CNT(J).EQ.0)PX1(J)=0  
      IF(CNT(J).EQ.-1)CNT(J)=0
C   N.B. 'TF' CONTROLS BG TIME WHEN BG .GT. 0   
1022      IF(BT.LT.T6.OR.IT3.GT.1)GO TO 1108
      T4=T2 
      T5=0  
      T6=10000.   
      GO TO 1108  
175      Y=0
      DO 105 K=1,NINS
      X=PX1(K)-OP1
105      IF(Y.LT.X)Y=X
      Y=Y+.5
C  ADDS .5" OF SILENCE.
      WRITE(LPT,7902) Y
      L=2
      Z=6.
      WRITE(LPT,3612)L,Z,Y
      WRITE(NWRITE)L,Z,Y
7902  FORMAT(' TER',F10.3,';'/)
603      FORMAT(I3,' INSTS.  DURATIONS=',10F8.2)
      TYPE 1603,AMPFAC,IAMP,AMPTIM
      WRITE(LPT,1603)AMPFAC,IAMP,AMPTIM
      DO 2175 K=1,NINS
2175      P(K)=PX1(K)-OP1
      WRITE(LPT,603)NINS,(P(K),K=1,NINS)
      TYPE 603,NINS,(P(K),K=1,NINS)
      CALL EXIT
104      FORMAT(' ***** ',A4,2F8.2,7X,'REST  <',I2,I4)
1603  FORMAT(' AMPL. FACTOR=',F4.2,', P4 MAX.AMP.=',I4,', AT TIME',
     1 F8.3)
      END


C*****  THIS ROUTINE DIVIDES OCTAVE INTO ANY NUMBER OF EQUAL PARTS

	SUBROUTINE SUBR
      COMMON/X/P(30),INST,IPAR,CNT(25),BT,IREST,CVT(35),
     1 PL(30),DF,DUR(25)
C   CALL SUBROUTINE FROM P12. P3 CAN BE NOTES OR NUMBS.
      X=P(3)
      IF(PL(3).EQ.1)GO TO 1
      IF(P(12).EQ.0)X=IFIX(X)
C  FOR RAND NOTES TO PRINT OUT FREQS.
      X=30.868*2**(X/12)
C  X=FREQ. IN HZ. BASED ON NOTE # IN P3.
      PL(3)=1.
C  THIS CAUSES FREQ. NUM TO PRINT INSTEAD OF LITERAL CHARACTERS.
1     P(3)=X*2**(P(11)/P(12))
C  P12=# OF DIVISIONS OF THE OCTAVE.  P11=CHROMATIC STEP IN THAT DIV.
      RETURN
      END

C   STEPS  ; TYPICAL INPUT FOR MICROTONE SUBROUTINE.
C   CLAR  /P2 .3/P3 A3/P4 1000;
C   P11 NUM/0/1/2/3/4/5/6/7/8/9/FINE*;
C   P12 9 SUBR/END;  OCTAVE IS DIVIDED INTO 9 PARTS.
      BLOCK DATA
      COMMON/X/P(30),J,L,CNT(25),BT,MK,VX(35),PL(30),DF,DUR(26),TF,
     1XT(25),ROFF(25),V(2000),NP(25),PCH(25,32),INST(26),IXIN,NINS,IALL,
     1DURX,AMPFAC,IT(30),I,OP1,INUM(25),BG(80),INP(72),TP,
     1CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
     1,LIST(78),INVIS(25),RDEV(25),IBLA,KSLA,ICOM,ISEMI,IMIN,ISTAR
     1,IEL,IPLUS
C  INST AND DUR MUST HAVE 1 MORE THAN MAX NUM OF INSTS IN ARRAYS!!!
      DATA ICOM/','/,IMIN/'-'/,ISEMI/';'/,IBLA/' '/,KSLA/'/'/
     1,ISTAR/'*'/,IPLUS/'+'/,IEL/'L'/
      DATA ISCA/'C','P','D','N','E','F','U','G','S','A','V','B'/
      DATA IDAT/'0','1','2','3','4','5','6','7','8','9','.'/
      DATA MU5/'T','C','2','N','V','R','3','4','X','I','H','M','D','S'/
C  OUT, OSC, AD2, RAN, ENV, STR, AD3, AD4, MLT, SET, RAH.
C  (CONT AND FLT NOT USED.)
      DATA SCAL/'C1','CS1','D1','DS1','E1','F1','FS1','G1',
     1 'GS1','A1','AS1','B1','C2','CS2','D2','DS2','E2',
     1 'F2','FS2','G2','GS2','A2','AS2','B2','C3','CS3','D3','DS3',
     1 'E3','F3','FS3','G3','GS3','A3', 'AS3','B3','C4','CS4',
     1'D4','DS4','E4','F4','FS4','G4','GS4','A4','AS4','B4','C5','CS5'
     1,'D5','DS5','E5','F5','FS5','G5','GS5','A5','AS5','B5','C6','CS6'
     1,'D6','DS6','E6','F6','FS6','G6','GS6','A6','AS6','B6','C7','CS7'
     1,'D7','DS7','E7','F7','FS7','G7','GS7','A7','AS7','B7','R','END'/ 
      END

C ***** SCANNER *************************  
      SUBROUTINE SCANR
      DIMENSION IP(30)
      COMMON/X/P(30),J,L,CNT(25),BT,MK,VX(35),PL(30),DF,DUR(26),TF,
     1XT(25),ROFF(25),V(2000),NP(25),PCH(25,32),INST(26),IXIN,NINS,IALL,
     1DURX,AMPFAC,IT(30),I,OP1,INUM(25),BG(80),INP(72),TP,
     1CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
     1,LIST(78),INVIS(25),RDEV(25),IBLA,KSLA,ICOM,ISEMI,IMIN,ISTAR
     1,IEL,IPLUS
      COMMON/SC/ML,JJ,NNUM,NFLG,JA,ISUB,CODE,IAMP,M
      COMMON /Q/ BNW(40),NWZ
      COMMON/FINE/LK
      EQUIVALENCE(IF,ISCA(6)),(ISS,ISCA(9)),(IE,ISCA(5)),(IDOT,IDAT(11))
     1 ,(IEN,ISCA(4)),(IP,P),(IR,MU5(6)),(II,MU5(10)),(IXX,MU5(9))
      NNUM=-1     
      ISKP=0
      JJ=0  
      XMINUS=1.    
999      IDECI=-1  
      M=0   
2799      N=INP(ML)
899   ML=ML+1
      IF(N.EQ.ISEMI)GO TO 751
      IF(N.NE.IBLA.AND.N.NE.ICOM)GO TO 510
4702      IF(ISKP)202,2799,2799

510      IF(JA.LT.0)GO TO 70
C********** MAY 22,71
      DO 77 K=1,12   
      IF(N.NE.ISCA(K))GO TO 77
      IF(K.NE.2.AND.K.NE.4)GO TO 511
      NSWCH=K-4
      GO TO 2799
C  TO SWITCH ALWAYS USE OCT.#  /PBF4/  /NE5/  P=PROXIMITY, N=NORMAL
C ************ MAY 22,71
511   NNUM=K
      JJ=JJ+1
      NFLG=-1
      N=INP(ML)
      IF(N.NE.IF)GO TO 410
      NNUM=NNUM-1
      GO TO 610
410      IF(N.NE.ISS)GO TO 3410
      NNUM=NNUM+1
610      ML=ML+1
      N=INP(ML)
3410      IF(N.NE.II)GO TO 371
C  'END' OR 'FINE' WILL END INST.
C******** MAY 20,71
3411      VX(JJ)=10000.
      IF(DUR(LK).LT.0)DUR(LK)=1000.
      IAMP=-1
      RETURN
371      IF(N.EQ.ISEMI.OR.N.EQ.IBLA)GO TO 5410
      DO 177 KN=2,8
      IF(N.NE.IDAT(KN))GO TO 177
      JSCA=KN-2
      ML=ML+1
      GO TO 2410
177      CONTINUE
      GO TO 6410
5410      KN=-1
6410      IF(NSWCH.EQ.0)GO TO 2410
      IF(KN.LT.0)GO TO 7410
      IF(N.EQ.IPLUS)NOLD=NOLD+6
      IF(N.EQ.IMIN)NOLD=NOLD-6
C /B/B-/ JUMPS DOWN OCT., /B/B+/ UP OCT.
7410      IF(NOLD-NNUM.GT.5.AND.JSCA.LT.7)JSCA=JSCA+1
      IF(NOLD-NNUM.LT.-5.AND.JSCA.GT.0)JSCA=JSCA-1
C   WILL JUMP TO NEAREST NOTE ***********  MAY 22,71
2410      VX(JJ)=JSCA*12+NNUM
      NOLD=NNUM
C ********** MAY 22,71
4410      NNUM=-2
      IF(INP(ML).EQ.ISEMI)RETURN
C   ABOVE FINDS SCALE NOTES; IF NSWCH=0 OCT. NUM WILL STICK UNTIL RESET
      GO TO 310
C *********MAY 22,71
77    CONTINUE    
70    IF(N.NE.IMIN)GO TO 71   
      XMINUS=-1.   
      GO TO 2799   
210      JJ=JJ+1
      IF(JJ.EQ.1)GO TO 3310
C****** MAY 19,71
      XMINUS=1.
      VX(JJ)=0
C  'X N1,N2' MAY REPLACE 'REP N1,N2'.  N2=0 BECOMES N2=2
      GO TO 310
71      IF(N.EQ.IXX)GO TO 210
      IF(N.EQ.IR)GO TO 73     

1410  DO 78 K=1,11
      IF(N.NE.IDAT(K))GO TO 78
      ISKP=-1
      IF(N.NE.IDOT)GO TO 79
      IDECI=M
      GO TO 75
79    M=M+1 
      IP(M)=K-1   
      GO TO 75
78      CONTINUE
      IF(N.NE.IF)GO TO 781
C  'END' OR 'FINE' WILL END INST.
      JJ=1
      GO TO 3411
781      IF(N.EQ.KSLA)N=ISEMI
C   FOR MOTIVIC TRANFORMATIONS

75     IF(INP(ML).EQ.IXX)GO TO 202
C  FOR 2X3  ETC.   6/74

752      IF(N.NE.ISEMI.AND.INP(ML).NE.1)GO TO 2799
751      IF(ISKP.EQ.0)RETURN
202   IF(IDECI.NE.-1)GO TO 302    
      IDECI=0     
      GO TO 402   
302   IDECI=M-IDECI     
402   KN=0  
      IEXP=M-1    
      IF(M.LT.1)M=1     
      DO 171 K=1,M
      KV=10**IEXP
      IF(IEXP.EQ.0)KV=1
      KN=KN+IP(K)*KV 
171     IEXP=IEXP-1     
      A=10**IDECI 
      IF(IDECI.EQ.0)A=1.
      JJ=JJ+1
      VX(JJ)=KN/A*XMINUS
      IF(ISUB.EQ.1)RETURN
      IF(CODE.NE.-22.)XMINUS=1.
C  ONLY ONE - NEEDED FOR RHY.COMPOSITE
1310      IF(INP(ML).NE.1)GO TO 310
      VX(JJ+1)=VX(JJ)*2.
      JJ=JJ+1
      ML=ML+1
      GO TO 1310
206      ML=ML+2
3310      VX(1)=-99.
C******** MAY 19,71
310      ISKP=0
        IF(N.NE.ISEMI)GO TO 999

          RETURN
73      JJ=JJ+1
       IF(INP(ML).EQ.IE)GO TO 206    
C   NEXT IS FOR A REST ('R')  
      VX(JJ)=85.
      GO TO 4410
        END

      SUBROUTINE BGSORT(BW)
C  THIS SORTS BG TIMES SO NONE ARE DUPLICATED IN BNW ARRAY.
C  ALLOWS 100 BG TIMES.
      COMMON /Q/ BNW(40),NWZ
      DO 5308 K=1,NWZ
      X=BNW(K)-.0001
      Y=X+.0002
C   ROUND-OFF NONSENSE
5308      IF(BW.GT.X.AND.BW.LT.Y)RETURN
      NWZ=NWZ+1
      BNW(NWZ)=BW
C  FOR ROUND-OFF
      RETURN
      END


      SUBROUTINE INSTS
      COMMON/X/P(30),J,L,CNT(25),BT,MK,VX(35),PL(30),DF,DUR(26),TF,
     1XT(25),ROFF(25),V(2000),NP(25),PCH(25,32),INST(26),IXIN,NINS,IALL,
     1DURX,AMPFAC,IT(30),I,OP1,INUM(25),BG(80),INP(72),TP,
     1CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
     1,LIST(78),INVIS(25),RDEV(25),IBLA,KSLA,ICOM,ISEMI,IMIN,ISTAR
     1,IEL,IPLUS
      COMMON/SC/ML,JJ,NNUM,NFLG,JA,ISUB,CODE,IAMP,M
      COMMON /Q/ BNW(40),NWZ
      COMMON/RW/NWRITE,NDEC,LPT,DEBUG
      DIMENSION IPBFV(4),IPL(30)
      DATA IPBFV/'P','B','F','V'/
      EQUIVALENCE (V2,V(2)),(V3,V(3)),(V4,V(4)),(VX2,VX(2)),(VX1,VX(1))
     1,(VX3,VX(3)),(V5,V(5))
     1,(VX4,VX(4)),(VX5,VX(5)),(VX6,VX(6))
     1,(ISS,ISCA(9))
     1,(IEM,MU5(12)),(IR,MU5(6))
     1,(IG,ISCA(8)),(IPL,PL)
C IF DIMENS. ARE CHANGED, CHANGE KZY. ALL CHNGS MUST BE MULTS OF KZY.
C SET INST(KZY+1), CHECK BG, CHECK BLOCK DATA VALUES.
      TYPE 3773
3773      FORMAT(' TYPE FILE NAME'/)
      ACCEPT 2107,IBM
C********** ABOVE 3 FOR PDP10 *********
2107      FORMAT(A5)
      IF(IBM.EQ.IBLA)IBM='ILIST'
C***** TO READ IN TEST FILE *******
      NWRITE=21
      REWIND NWRITE
C  21=DSK1 ON PDP10.  'REWIND' RESETS IT.

      REWIND 1
C********** PDP10 RESET **********
      CALL IFILE(1,IBM)
      NDEC=1
C   SET NDEC TO 5 FOR IBM.**** 1=PDP10 DSK ****
3000      FORMAT(1X72A1)
      ML=2
      LPAR=0
      ISUB=0
8002      JA=-1
      ICT=0
      LPT=3
C*******PDP10 LPT=3 ***********
      IF(INP(ML-1).EQ.KSLA)GO TO 101
8001      READ(NDEC,5900)KW,INP
C   REMOVE KW ETC. FOR CARDS OR NO LINE NUMBERS.
7006      WRITE(LPT,3000)INP

      IF(INP(1).EQ.IBLA)GO TO 8001
C   BLANK LINES MAY APPEAR IN INSTS.
      ML=1
101      IZ=15
      N=INP(ML+2)
      DO 2900 K=1,14
2900      IF(N.EQ.MU5(K))IZ=K
      IF(IZ.NE.1)GO TO 3900
      IF(INP(ML).EQ.IEM)IZ=9
      IF(INP(ML).EQ.ISS)IZ=10
      IF(INP(ML+1).EQ.IR)IZ=12
C 9=MLT  10=SET  12=SRT
      GO TO 4900
3900      IF(INP(ML).EQ.IG)GO TO 2899
C  JUMP FOR GEN
4900      ML=ML+3
      IF(IZ.LE.11)GO TO 9015
C  JUMP IF IT'S A UNIT GENERATOR
      IZ=IZ-11
      GO TO (9018,9014,6900,1129),IZ
C             SRT   END  INS  SCORE
C  ABOVE FOR UNIT GENERATORS
6900      Y=36.
C  Y IS FOR AUTOMATIC LAST PARAM NUM.
      CALL SCANR
12      V2=2.
      V3=VX1
      V4=VX2
      L=4
C  L=TOTAL WD CNT.
      GO TO 72
5      L=JJ+4
      DO 9021 K=5,L
9021      V(K)=VX(K-4)
      GO TO(72,172,72,172,172,72,72,72,72,72,172,72,72),IZ
172      NL=1
      IF(IZ.EQ.4)NL=3
      IF(IZ.EQ.11)NL=2
      DO 472 K=1,NL
      Y=Y-1.
      L=L+1
472      V(L)=Y
      IF(IZ.EQ.2)L=9
C  ABOVE ALLOWS A 'V' TO BE PUT AT END OF OSC.
72      M=L-1
       WRITE(NWRITE)M,(V(K),K=2,L)
6006      WRITE(LPT,5552)M,(V(K),K=2,L)
      IF(LPAR)2129,8002,8002
5552      FORMAT(I5,(14F9.2))
9014      L=3
      GO TO 72
2899      ML=ML+3
      CALL SCANR
6      V2=3.
      NL=3
      L=JJ+ICT+2
      GO TO 8006
60      NL=ICT+1
      L=JJ+ICT
8006      DO 9022 K=NL,L
9022      V(K)=VX(K-NL+1)
      DO 90221 K=1,72
      N=INP(K)
      IF(N.EQ.ISTAR)GO TO 72
      IF(N.EQ.KSLA)CALL EXIT
90221      IF(N.EQ.ISEMI)GO TO 90222
90222      READ(1,5900)K,INP
C  READS SECOND LINE OF GEN INPUT. NO! SLASHES WITH GEN.
C  ****** NO MORE!! THAN TWO LINES PER GEN ALLOWED.!!!!!******
      WRITE(LPT,3000)INP
      IF(NL.NE.3)CALL EXIT
      ML=1
      ICT=ICT+L
      CALL SCANR
      GO TO 60
9015      M=1
      DO 111 K=ML,72
      N=INP(K)
      IF(N.NE.ICOM)GO TO 1003
      INP(K)=IBLA
      GO TO 111
1003      IF(N.EQ.IBLA)GO TO 111
      IF(N.EQ.KSLA)GO TO 1004
      IF(N.NE.ISEMI)GO TO 1006
      GO TO 1004
1006      DO 1005 J=1,4
      IF(N.NE.IPBFV(J))GO TO 1005
      IPL(M)=J
      M=M+1
      INP(K)=IBLA
      GO TO 111
1005      CONTINUE
111      CONTINUE
1004      CALL SCANR
      DO 21 K=1,JJ
      X=VX(K)
      GO TO (17,18,19,20),IPL(K)
C IPL(30) -- ROOM FOR 30 ARGS. IN INST DEF. LINE (SEVERAL UN.GENS.)
18      X=-X
      GO TO 21
19      X=-X-100
      GO TO 21
20      X=X+100
      GO TO 21
17    X=X+2
C  +2 SETS NUMBERS AHEAD FOR MUSIC5 NEEDS
21      VX(K)=X
      V4=IZ+100
      IF(IZ.EQ.6)LPAR=1
      GO TO 5
C   IZ+100=FORTR. UNIT GENS. IZ=MACH. LANG. UNIT GENS.
9018  V4=4.
       CALL SCANR
8      V5=VX1
      V2=11.
      CVTX=V5
88      L=5
      GO TO 72
1129      IF(LPAR)2129,2129,222
222      V2=12.
      V4=8.
      V5=1.
      LPAR=-1
      GO TO 88
2129      LPAR=0
      DO 107 K=1,6
107      VX(K)=0
      ML=ML+2
      CALL SCANR
      IXIN=1
      TF=1
      AMPFAC=1
      DURX=19999.
      IF(VX1.NE.0)IXIN=VX1
      IF(VX2.NE.0)TF=VX2
      IF(VX3.NE.0)AMPFAC=VX3
      OP1=VX4
      IF(VX5.NE.0)DURX=VX5
5900      FORMAT(I,72A1)
1107      FORMAT(I,A4,72A1)
C****REMOVE I IF NO LINE NUMBERS TO BE READ. ********
      CALL RNDINT
      DEBUG=VX6
C  TYPE 'SCORE', TF=TEMPO FACTOR(0=1), AMPFAC=AMPL.FACT(0=1), OP1=SECONDS TO BE OMITTED, 
C  DURX=DUR AT CUTOFF, DEBUG>0 PRINTS 'V' ARRAY.

      RETURN
      END


C  ROUTINE FOR TEMPERED SCALE PITCHES.
	SUBROUTINE TMPSC
      COMMON/X/ P(30),J,L,CNT(25),BT,MK,VX(35),PL(30),DF,DUR(26),TF,
     1XT(25),ROFF(25),V(2000),NP(25),PCH(25,32),INST(26),IXIN,NINS,IALL,
     1DURX,AMPFAC,IT(30),I,OP1,INUM(25),BG(80),INP(72),TP,
     1CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
     1,LIST(78),INVIS(25),RDEV(25),IBLA,KSLA,ICOM,ISEMI,IMIN,ISTAR
     1,IEL,IPLUS
      EQUIVALENCE (Z,LIST(3))
      Z=IFIX(Z)
      Z=30.868*2**(Z/12.)
C  FINDS TEMPERED PITCH FROM NOTE NUMBER.  
C  COULD BE ADAPTED TO MICROTONE ROUTINE.
      RETURN
      END


      SUBROUTINE RANR(VX,K)
C   FOR RAN. SELEC. OF NOTES.  FINDS HIGHEST NOTE.
      DIMENSION VX(1)
      X=VX(K)
      Y=VX(K+1)
      IF(X.GT.Y)VX(K)=X+.999
      IF(Y.GE.X)VX(K+1)=Y+.999
      RETURN
      END

      SUBROUTINE ACCL(RA,KA,RC,XA,Z,Y,X,XT,YY,RB,W)
4020  RD=1  
      IF(RA.LT.0)RD=-1. 
      RA=RA*RD    
      IF(KA.EQ.0)RA=RA-RC     
      W=RA  
      RB=W  
      IF(W.LE.Z)GO TO 2020    
      IF(Z.NE.0)GO TO 3020    
      RA=RA/Y     
      RB=-1.
      RC=0  
      GO TO 8020  
3020      W=Z     
      RC=W+RC     
      GO TO 24    
2020      RC=0    
24      IF(X.NE.Y)GO TO 424
      RA=W/X
      GO TO 8020
C DUR OF TMP+BG TIME OF TMP - NOTE VALUE - BG TIME OF NOTE.  CHN=TBG.
424      RAX=XT
      RA=(-2.*RAX+(4.*RAX**2+8.*YY*W)**.5)/(2.*YY)
      XT=RAX+YY*RA
8020      IF(KA.EQ.0)RA=RA+XA 
      KA=1  
      RETURN
      END

      SUBROUTINE ACCL2(XA,RA,K,ZPAR,CHN,ZZ,KA,X,Y,Z,YY,PR)
      COMMON/X/P(30),J,L,CNT(25),BT,MK,VX(35),PL(30),DF,DUR(26),TF,
     1XT(25),ROFF(25),V(2000),NP(25),PCH(25,32),INST(26),IXIN,NINS,IALL,
     1DURX,AMPFAC,IT(30),I,OP1,INUM(25),BG(80),INP(72),TP,
     1CVTX,ISCA(12),IDAT(11),IQ(25),SCAL(86),MU5(14)
     1,LIST(78),INVIS(25),RDEV(25),IBLA,KSLA,ICOM,ISEMI,IMIN,ISTAR
     1,IEL,IPLUS
2011      XA=RA   
      IF(K.GT.1)GO TO 9920
      K=I-6
      ZPAR=-9900.-CHN-ZZ
      DO 3011 KL=8,I     
      IF(V(K).EQ.ZPAR.AND.V(K+1).EQ.990000.)GO TO 9920    
3011      K=K-1
9920      W=ZZ  
      IF(V(K+3).LT.0)K=K+3
C   ABOVE IS FOR TYPED IN ITMPO CHANGES
      KA=K+3
      ZZ=V(KA)
C   DUR OF NEXT TEMPI
      X=V(KA+1)
      Y=V(KA+2)
213      KA=0  
      Z=ZZ  
      CALL SQYY(YY,X,Y,Z)
C   GETS VALUE OF YY
      CHN=CHN+W   
      XT(J)=X
      IF(KA.EQ.1)Z=0    
      RA=PR 
      KA=0
      K=K+3
      RETURN
      END

      SUBROUTINE SQYY(YY,X,Y,Z)
      YY=2.*Z/(X+Y)
      IF(YY.NE.0)YY=2.*(Z-X*YY)/YY**2
      RETURN
      END

      FUNCTION RMOVX(W,Y,Z)
      IF(W.EQ.0)W=.01
      IF(Y.EQ.0)Y=.01
      RMOVX=Y*((W/Y)**Z)
      END